
//  静态内部类
//      1.如何实例化内部类对象
//      OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
//      2.如何访问外部类的普通成员变量






class OuterClass2 {
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;

//    静态内部类
    static class InnerClass {
        public int data4 = 4;
        private int data5 = 5;
        public static final int data6 = 6;

        public InnerClass() {
        }
//      1.直接初始化
//        public OuterClass2 out = new OuterClass2();//还可以通过构造方法
//      2.调用实例化内部内的时候 传一个外部类引用
        public OuterClass2 out;
        public InnerClass(OuterClass2 out) {
            this.out = out;
        }




        public void test() {
//            System.out.println(data1);error 不能被访问
//            System.out.println(data2);error 不能被访问

//            new OuterClass2().外部类对象的引用
            System.out.println(new OuterClass2().data1);
            System.out.println(out.data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
            System.out.println("InnerClass::Test()");
        }
    }


}

public class TestDemo2 {
    public static void main1(String[] args) {
//        实例化静态内部类 和 实例内部类有区别 new的位置不一样
        OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
        innerClass.test();
//        1
//        2
//        3
//        4
//        5
//        6
//        InnerClass::Test()
    }


    public static void main2(String[] args) {
//        实例化静态内部类 和 实例内部类有区别 new的位置不一样
        OuterClass2 o = new OuterClass2();
        OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass(o);
        innerClass.test();
//        1
//        2
//        3
//        4
//        5
//        6
//        InnerClass::Test()
    }


//    静态内部类 可能比 实例内部类更好一点
//    实例化静态内部类对象的时候 可以没有外部类对象 main1
}
